package com.hmall.user.controller;

import com.hmall.user.domain.dto.LoginFormDTO;
import com.hmall.user.domain.vo.UserLoginVO;
import com.hmall.user.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 用户相关接口控制器
 * 处理用户登录、余额扣减等HTTP请求
 */
@Api(tags = "用户相关接口")
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {

    // 注入用户服务
    private final IUserService userService;

    /**
     * 用户登录接口
     * @param loginFormDTO 登录表单DTO，包含用户名和密码
     * @return 登录成功后的用户信息和Token
     */
    @ApiOperation("用户登录接口")
    @PostMapping("login")
    public UserLoginVO login(@RequestBody @Validated LoginFormDTO loginFormDTO) {

        // 调用服务层登录方法，返回包含用户信息和Token的VO对象
        return userService.login(loginFormDTO);
    }

    /**
     * 扣减用户余额接口
     * @param pw     用户支付密码
     * @param amount 扣减金额（单位：分）
     */
    @ApiOperation("扣减余额")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "pw", value = "支付密码"),
            @ApiImplicitParam(name = "amount", value = "支付金额")
    })
    @PutMapping("/money/deduct")
    public void deductMoney(@RequestParam("pw") String pw, @RequestParam("amount") Integer amount) {

        // 调用服务层扣款方法
        userService.deductMoney(pw, amount);
    }
}

